/**
 * 本地存储使用示例
 * 展示如何使用LocalStorage类进行数据存储
 */

import { LocalStorage } from '@/utils/localStorage';
import {
  AUTH_TOKEN,
  USER_INFO,
  THEME_MODE,
  SELECTED_SCHOOL,
  localStorageKeys
} from '@/utils/localStorageKeys';

// 基本使用示例
export const localStorageExample = {
  // 1. 基本存储操作
  basicUsage() {
    // 设置数据
    LocalStorage.setItem(AUTH_TOKEN, 'user_token_123');
    LocalStorage.setItem(THEME_MODE, 'dark');

    // 获取数据
    const token = LocalStorage.getItem(AUTH_TOKEN);
    const theme = LocalStorage.getItem(THEME_MODE);

    // 删除数据
    LocalStorage.removeItem(AUTH_TOKEN);

    // 清空所有数据
    LocalStorage.clear();

    console.log('基本操作完成');
  },

  // 2. 类型化存储（自动JSON序列化）
  typedUsage() {
    // 存储复杂对象
    const userInfo = {
      id: 1,
      name: '张三',
      email: 'zhangsan@example.com'
    };

    LocalStorage.setTypedItem(USER_INFO, userInfo);

    // 获取并自动解析
    const savedUserInfo = LocalStorage.getTypedItem(USER_INFO);
    console.log('用户信息:', savedUserInfo);

    // 带默认值的获取
    const theme = LocalStorage.getTypedItem(THEME_MODE);
    console.log('主题模式:', theme);
  },

  // 3. 存储空间管理
  storageManagement() {
    // 获取所有键名
    const allKeys = LocalStorage.getAllKeys();
    console.log('所有存储键:', allKeys);

    // 获取存储使用情况
    const storageInfo = LocalStorage.getStorageInfo();
    console.log('存储使用情况:', storageInfo);

    // 获取键的描述信息
    const themeDesc = LocalStorage.getKeyDescription(THEME_MODE);
    console.log('主题模式描述:', themeDesc);
  },

  // 4. 错误处理示例
  errorHandling() {
    try {
      // 尝试在隐私模式下使用localStorage（会抛出异常）
      LocalStorage.setItem('test', 'value');
    } catch (error) {
      console.warn('隐私模式下无法使用localStorage');
    }

    // 安全的存储操作
    const success = LocalStorage.setItem(AUTH_TOKEN, 'token');
    if (success) {
      console.log('令牌存储成功');
    } else {
      console.warn('令牌存储失败');
    }
  },

  // 5. 实际业务场景示例
  businessUsage() {
    // 记住用户选择的学校
    const selectedSchoolId = 'school_001';
    LocalStorage.setItem(SELECTED_SCHOOL, selectedSchoolId);

    // 记住用户偏好设置
    const preferences = {
      autoPlay: false,
      notifications: true,
      language: 'zh-CN'
    };
    LocalStorage.setTypedItem('user_preferences', preferences);

    // 缓存API数据（带过期检查）
    const cacheData = {
      data: [1, 2, 3],
      timestamp: Date.now(),
      ttl: 5 * 60 * 1000 // 5分钟过期
    };

    LocalStorage.setTypedItem('api_cache', cacheData);

    // 检查缓存是否过期
    const cached = LocalStorage.getTypedItem('api_cache', null);
    if (cached && Date.now() - cached.timestamp < cached.ttl) {
      console.log('使用缓存数据:', cached.data);
    } else {
      console.log('缓存已过期，重新获取数据');
      // 重新获取数据的逻辑...
    }
  },

  // 6. 批量操作示例
  batchOperations() {
    // 批量清理过期的缓存
    const expiredKeys = [
      'temp_cache_1',
      'temp_cache_2',
      'old_data'
    ];

    expiredKeys.forEach(key => {
      LocalStorage.removeItem(key);
    });

    // 批量设置默认值
    const defaults = {
      [THEME_MODE]: 'light',
      'auto_save': 'true',
      'max_history': '10'
    };

    Object.entries(defaults).forEach(([key, value]) => {
      const current = LocalStorage.getItem(key);
      if (current === null) {
        LocalStorage.setItem(key, value);
      }
    });
  }
};

// 使用示例：
// import { localStorageExample } from '@/utils/localStorageExample';
// localStorageExample.basicUsage();
